home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / ip / slip / cslip-2.6 / tip / libacu / df.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-06-30  |  2.6 KB  |  119 lines

  1. /*
  2.  * Copyright (c) 1983 The Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted
  6.  * provided that: (1) source distributions retain this entire copyright
  7.  * notice and comment, and (2) distributions including binaries display
  8.  * the following acknowledgement:  ``This product includes software
  9.  * developed by the University of California, Berkeley and its contributors''
  10.  * in the documentation or other materials provided with the distribution
  11.  * and in all advertising materials mentioning features or use of this
  12.  * software. Neither the name of the University nor the names of its
  13.  * contributors may be used to endorse or promote products derived
  14.  * from this software without specific prior written permission.
  15.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  16.  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  17.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  */
  19.  
  20. #ifndef lint
  21. static char sccsid[] = "@(#)df.c    5.3 (Berkeley) 6/1/90";
  22. #endif /* not lint */
  23.  
  24. /*
  25.  * Dial the DF02-AC or DF03-AC
  26.  */
  27.  
  28. #include "tip.h"
  29.  
  30. static jmp_buf Sjbuf;
  31. static timeout();
  32.  
  33. df02_dialer(num, acu)
  34.     char *num, *acu;
  35. {
  36.  
  37.     return (df_dialer(num, acu, 0));
  38. }
  39.  
  40. df03_dialer(num, acu)
  41.     char *num, *acu;
  42. {
  43.  
  44.     return (df_dialer(num, acu, 1));
  45. }
  46.  
  47. df_dialer(num, acu, df03)
  48.     char *num, *acu;
  49.     int df03;
  50. {
  51.     register int f = FD;
  52.     struct sgttyb buf;
  53.     int speed = 0, rw = 2;
  54.     char c = '\0';
  55.  
  56.     ioctl(f, TIOCHPCL, 0);        /* make sure it hangs up when done */
  57.     if (setjmp(Sjbuf)) {
  58.         printf("connection timed out\r\n");
  59.         df_disconnect();
  60.         return (0);
  61.     }
  62.     if (boolean(value(VERBOSE)))
  63.         printf("\ndialing...");
  64.     fflush(stdout);
  65. #ifdef TIOCMSET
  66.     if (df03) {
  67.         int st = TIOCM_ST;    /* secondary Transmit flag */
  68.  
  69.         ioctl(f, TIOCGETP, &buf);
  70.         if (buf.sg_ospeed != B1200) {    /* must dial at 1200 baud */
  71.             speed = buf.sg_ospeed;
  72.             buf.sg_ospeed = buf.sg_ispeed = B1200;
  73.             ioctl(f, TIOCSETP, &buf);
  74.             ioctl(f, TIOCMBIC, &st); /* clear ST for 300 baud */
  75.         } else
  76.             ioctl(f, TIOCMBIS, &st); /* set ST for 1200 baud */
  77.     }
  78. #endif
  79.     signal(SIGALRM, timeout);
  80.     alarm(5 * strlen(num) + 10);
  81.     ioctl(f, TIOCFLUSH, &rw);
  82.     write(f, "\001", 1);
  83.     sleep(1);
  84.     write(f, "\002", 1);
  85.     write(f, num, strlen(num));
  86.     read(f, &c, 1);
  87. #ifdef TIOCMSET
  88.     if (df03 && speed) {
  89.         buf.sg_ispeed = buf.sg_ospeed = speed;
  90.         ioctl(f, TIOCSETP, &buf);
  91.     }
  92. #endif
  93.     return (c == 'A');
  94. }
  95.  
  96. df_disconnect()
  97. {
  98.     int rw = 2;
  99.  
  100.     write(FD, "\001", 1);
  101.     sleep(1);
  102.     ioctl(FD, TIOCFLUSH, &rw);
  103. }
  104.  
  105.  
  106. df_abort()
  107. {
  108.  
  109.     df_disconnect();
  110. }
  111.  
  112.  
  113. static
  114. timeout()
  115. {
  116.  
  117.     longjmp(Sjbuf, 1);
  118. }
  119.